package SubjectString;

public class LeftRotateString {

/**
 * 难度：简单
 * 
 * 剑指Offer 43.左旋转字符串
 * 	字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
 * 	请定义一个函数实现字符串左旋转操作的功能。比如，输入字符串"abcdefg"和数字2，
 * 	该函数将返回左旋转两位得到的结果"cdefgab"。
 * 
 * 示例 1：
 * 	输入: s = "abcdefg", k = 2
 * 	输出: "cdefgab"
 * 
 * 示例 2：
 * 	输入: s = "lrloseumgh", k = 6
 * 	输出: "umghlrlose"
 * 
 * 限制：
 * 	1 <= k < s.length <= 10000
 * 
 * */
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		LeftRotateString lrs = new LeftRotateString();
		System.out.println(lrs.leftRotateString1("abcdefg", 2));
	}
	//自己写
	public String leftRotateString(String str,int n) {
		if(str.length()==0)return "";
        char[] c = str.toCharArray();
        for(int i=0;i<n;i++) {
        	char temp = c[0];
        	int j = 0;
        	while(j<str.length()-1) {
        		c[j] = c[j+1];
        		j++;
        	}
        	c[str.length()-1] = temp;
        }
		return String.valueOf(c);
    }
	//自己写
	public String leftRotateString1(String str,int n) {
		StringBuilder sb = new StringBuilder(str);
		//反转区间为前n的子串
		reverse(sb,0,n-1);
		//反转区间为n到末尾的子串
		reverse(sb,n,sb.length()-1);
		//反转整个字符串
		reverse(sb,0,sb.length()-1);
		return sb.toString();
    }
	private void reverse(StringBuilder sb,int left,int right) {
		while(left<right) {
			char charAt = sb.charAt(left);
			sb.setCharAt(left++, sb.charAt(right));
			sb.setCharAt(right--, charAt);
		}
	}
}
